Support TCP for protocol messages - #3636
Conversation
5e1a658 to
0ae51e2
Compare
7ad1d1f to
d939e5b
Compare
|
So the next stage of implementation has been achieved: client-side support in the Connect dialog.
It has been tested by using Examples for a directory-enabled server running on port 22120:
Note that
|
|
The next step is to try implementing the connected-mode TCP described here |
| bool bUseTranslation = true; | ||
| bool bCustomPortNumberGiven = false; | ||
| bool bEnableIPv6 = false; | ||
| bool bEnableTcp = false; |
There was a problem hiding this comment.
Since we'll have a long time for the 4.0 release, I'd enable it by default soon (of course once we've tested that the basics work)
There was a problem hiding this comment.
No, I disagree. It's a server-only option, and most servers operators will not need to enable TCP support. Only those running large directories or large servers will need to, and they also need to understand and configure their firewall requirements.
TCP support in the client will indeed be enabled by default, but will only take effect when talking to a directory or server that has enabled it.
If a server operator enables TCP without having configured their firewall correctly, client users could have problems as the server would advertise TCP support to the client, but the client could be unable to connect.
There was a problem hiding this comment.
Can we not give an error message or fallback procedure in case the TCP connection timed out?
There was a problem hiding this comment.
Yes, I'm sure we can. I haven't yet tested that scenario.
But it doesn't negate my view that server-side TCP support needs to be an explicit option.
There was a problem hiding this comment.
There was a problem hiding this comment.
Since when do we have a long time?
There's absolutely no benefit to anyone involved in the project - developers or users - in having long release cycles.
A version cut takes very little time - apart from the translation process. Even then, getting used to more, small changes is likely to speed things up generally.
|
Well I've finished implementing everything I intended to, for directory, server and client, so it's ready for reviewing and trying out, as and when time permits (post 3.12.0). I have a private directory and server built and running with TCP support, at In order to demonstrate the use of TCP in a new client's connect dialog, it will be necessary to use custom firewall filters on the client end to temporarily drop incoming UDP Jamulus protocol messages containing a server list or connected clients list. There is full forward and backward compatibility between clients and servers built with TCP support and older versions. |
|
Keeping as draft, because it will need quite a few debug messages removed before merging. |
- Use better randomn number generator - Only include TCP in server features if a listener is running (which it always should be)
This is so that CClient::OnSendCLProtMessage can identify the correct pendingList hash to use when handling TCP connect errors. The ID is unused by CServer and CTestBench, so is not named.
This reverts commit 6156029.
Re comment from AI review
14df972 to
05aaf0a
Compare
|
(I'm experimenting with asking AI to "roast" errors it sees in other AI output, and it's only fair to "roast" itself when it discovers an error in its own previous work. I hope some humor might help us pay attention to the concerning AI predilection toward confident error. Perhaps this escalates into a Battle of Poindexters, but so far it seems sensible.) 🤖 AI: Correction to the review's last line: |
|
🤖 AI: independent functional verification at head Built the headless server (
Not exercised here: directory-mode server-list fetch (no directory instance available), and injected UDP loss (no root for tc/netem/nft), so the UDP→TCP fallback paths are code-traced rather than drop-tested in this run.
|
|
Unrelated: (The AI read COMMENTING.md as per AGENTS.md - so I think we can and should indeed go forward with the restructuring of the docs) |
Short description of changes
Support fallback to TCP for protocol messages, in order to overcome potential loss of large messages due to UDP fragmentation.
Currently an incomplete draft, for comment as development continues.CHANGELOG: Client/Server: Support TCP fallback for protocol messages.
Context: Fixes an issue?
Discussed in issue #3242.
Does this change need documentation? What needs to be documented and how?
It will need documentation once design and development are complete. Particularly need to explain the firewall requirements for a server or directory.
Status of this Pull Request
Incomplete, still under development. Main server side complete and working. Client side development in progress.Complete and ready for review and testing.Still marked draft asit needs some of the debug messages to be commented out before merging.What is missing until this pull request can be merged?
A lot of testing of both server and client. Intended for Jamulus 4.0.0.
Checklist